/*
 * To change this template, choose Tools | Templates
 * AND open the template in the editor.
 */

package modelos;

import java.lang.String;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

import decorador.Decorador;
import decorador.DecoradorListarIngredientes;
import decorador.DecoradorListarMasUsados;
import decorador.DecoradorListarProductos;

/**
 *
 * @author usuario
 */
public class ModeloProducto extends ModeloDB{
    private int cod_cat;
    private float precio;
    private Decorador decorador;
    private DecoradorListarProductos listadorProducto;
    private DecoradorListarMasUsados listadorMas;
    

    public ModeloProducto(){
            super();
            decorador= new Decorador();
            listadorMas= new DecoradorListarMasUsados();
            listadorProducto= new DecoradorListarProductos();
            listadorMas.setModelo(this);
            listadorProducto.setModelo(this);
    }

    public boolean registrar(){
    	registrador.registrar();
        return registrador.getSw();
    }
    

    public void registarIngredientes(LinkedList<Integer> codigos,LinkedList<Float> raciones){
        abrirConexion();
        for (int i = 0; i < raciones.size(); i++){
            String tira="INSERT INTO IngredienteXProducto (cod_pro,cod_ing, racion ) VALUES("+getCodigo()+","+codigos.get(i)+","+raciones.get(i)+")";
            try {
                 Statement stam = conexion.createStatement();
                stam.execute(tira);
            } catch (SQLException ex) {
                Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
            }
        }        
        cerrarConexion();
    }


  public LinkedList<ModeloProducto> consultarGeneral(){
    LinkedList<ModeloProducto> v = new LinkedList<ModeloProducto>();
    String tira="SELECT * FROM Producto WHERE estatus='A'";
    abrirConexion();
    try {
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while (rs.next()){
            ModeloProducto  i = new ModeloProducto();
            i.setDescripcion(rs.getString("descripcion"));
            i.setCodigo(rs.getInt("codigo"));
            i.setPrecio(rs.getFloat("precio"));
            i.setEstatus(rs.getString("estatus"));
            i.setCod_cat(rs.getInt("cod_cat"));
            v.add(i);
         }
    } catch (SQLException ex) {
        Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }
  

  public LinkedList<String []> listarVentas(boolean asc, boolean desc){
	  listadorProducto.setAsc(asc);
	  listadorProducto.setDesc(desc);
	  decorador.setComponete(listadorProducto);
	  decorador.listar();
	  return listadorProducto.getLista();
  }
  
  public LinkedList listarIngredientesMasUsados(boolean asc, boolean desc){
	  listadorMas.setAsc(asc);
	  listadorMas.setDesc(desc);
	  decorador.setComponete(listadorMas);
	  decorador.listar();
	  return listadorMas.getLista();
  }

   public boolean revisarDisponibilidadStockIngredientes(){
    LinkedList<ModeloIngrediente> v = new LinkedList<ModeloIngrediente>();
    LinkedList<Float> f = new LinkedList<Float>();
    String tira="SELECT Ingrediente.codigo,IngredientexProducto.racion FROM  Ingrediente,IngredientexProducto,Producto WHERE Ingrediente.estatus='A'  AND Producto.estatus='A' AND Ingrediente.codigo=IngredientexProducto.cod_ing AND Producto.codigo=IngredientexProducto.cod_pro AND Producto.codigo="+getCodigo();
    abrirConexion();
    try{
        Statement stam = conexion.createStatement();
        ResultSet rs = stam.executeQuery(tira);        
        while(rs.next()){
            ModeloIngrediente  i = new ModeloIngrediente();
            i.setCodigo(rs.getInt(1));
            f.add(rs.getFloat(2));
            v.add(i);
         }
     } catch (SQLException ex) {
            Logger.getLogger(ModeloIngrediente.class.getName()).log(Level.SEVERE, null, ex);
     }
     cerrarConexion();
     int i = 0;
     for (ModeloIngrediente m : v) {
         if(m.revisarDisponibilidadStock(f.get(i)))
             return false;
         i++;
     }
     return true;
  }

 public void restarStockIngredientes(){
    LinkedList<ModeloIngrediente> v = new LinkedList<ModeloIngrediente>();
    LinkedList<Float> f = new LinkedList<Float>();
    String tira="SELECT Ingrediente.codigo,IngredientexProducto.racion FROM  Ingrediente,IngredientexProducto,Producto WHERE Ingrediente.estatus='A'  AND Producto.estatus='A' AND Ingrediente.codigo=IngredientexProducto.cod_ing AND Producto.codigo=IngredientexProducto.cod_pro AND Producto.codigo="+getCodigo();
    abrirConexion();
    try{
        Statement stam = conexion.createStatement();
        ResultSet rs = stam.executeQuery(tira);
        while(rs.next()){
            ModeloIngrediente  i = new ModeloIngrediente();
            i.setCodigo(rs.getInt(1));
            f.add(rs.getFloat(2));
            v.add(i);
         }
     } catch (SQLException ex) {
            Logger.getLogger(ModeloIngrediente.class.getName()).log(Level.SEVERE, null, ex);
     }
     cerrarConexion();
     int i = 0;
     for (ModeloIngrediente m : v) {
         m.consultar();
         m.setStock(m.getStock()-f.get(i));
         m.restarStock();
         i++;
     }
  }   


    public float getPrecio() {
        return precio;
    }

    public void setPrecio(float precio) {
        this.precio = precio;
    }

    public int getCod_cat() {
        return cod_cat;
    }

    public void setCod_cat(int cod_cat) {
        this.cod_cat = cod_cat;
    }

    

    

    



}
